/**
 * 缓存
 * Copyright (c) 2023 dfec
 */

/**
 * 会话级缓存
 */
const sessionCache = {
    /**
     * 存储值
     * @param {String} key
     * @param {String} value
     * @returns
     */
    set(key, value) {
        if (!sessionStorage) {
            return
        }
        if (key != null && value != null) {
            sessionStorage.setItem(key, value)
        }
    },

    /**
     * 获取值
     * @param {String} key
     * @returns
     */
    get(key) {
        if (!sessionStorage) {
            return null
        }
        if (key == null) {
            return null
        }
        return sessionStorage.getItem(key)
    },

    /**
     * 存储值
     * @param {String} key
     * @param {Object} jsonValue
     * @returns
     */
    setJSON(key, jsonValue) {
        if (jsonValue != null) {
            this.set(key, JSON.stringify(jsonValue))
        }
    },

    /**
     * 获取值
     * @param {String} key
     * @returns
     */
    getJSON(key) {
        const value = this.get(key)
        if (value != null) {
            return JSON.parse(value)
        }
    },

    /**
     * 移除值
     * @param {String} key
     * @returns
     */
    remove(key) {
        sessionStorage.removeItem(key)
    }
}

/**
 * 本地缓存
 */
const localCache = {
    /**
     * 存储值
     * @param {String} key
     * @param {String} value
     * @returns
     */
    set(key, value) {
        if (!localStorage) {
            return
        }
        if (key != null && value != null) {
            localStorage.setItem(key, value)
        }
    },

    /**
     * 获取值
     * @param {String} key
     * @returns
     */
    get(key) {
        if (!localStorage) {
            return null
        }
        if (key == null) {
            return null
        }
        return localStorage.getItem(key)
    },

    /**
     * 存储值
     * @param {String} key
     * @param {Object} jsonValue
     * @returns
     */
    setJSON(key, jsonValue) {
        if (jsonValue != null) {
            this.set(key, JSON.stringify(jsonValue))
        }
    },

    /**
     * 获取值
     * @param {String} key
     * @returns
     */
    getJSON(key) {
        const value = this.get(key)
        if (value != null) {
            return JSON.parse(value)
        }
    },

    /**
     * 移除值
     * @param {String} key
     * @returns
     */
    remove(key) {
        localStorage.removeItem(key)
    }
}

export default {
    /**
     * 会话级缓存
     */
    session: sessionCache,
    /**
     * 本地缓存
     */
    local: localCache
}
